const Dept = require('../model/deptSchema')
const utils = require('../utils/utils')
const router = require('koa-router')()
router.prefix('/dept')

function TreeDeptList(data) {
  let result = []; // 返回的树形数据
  let map = {};    // 存储id到节点的映射

  // 首先为每个节点初始化children数组，并构建映射
  data.forEach(item => {
    // 复制原对象并初始化children，避免修改原数据
    map[item._id] = { ...item, children: [] };
  });

  // 然后构建树形结构
  data.forEach(item => {
    const currentNode = map[item._id];
    const parentId = item.deptId;

    if (parentId) {
      // 检查父节点是否存在于映射中
      if (map[parentId]) {
        map[parentId].children.push(currentNode);
      } else {
        // 处理父节点不存在的情况，作为根节点处理
        result.push(currentNode);
      }
    } else {
      // 没有parentId的作为根节点
      result.push(currentNode);
    }
  });

  return result;
}


//部门列表渲染
router.get('/list', async (ctx) => {
  var { deptName } = ctx.request.query
  try {
    let params = {}
    if (deptName) params.deptName = { $regex: deptName } //{ $regex: deptName }这个可以起到模糊查询的作用
    let rootlist = await Dept.find(params).lean()
    let res = TreeDeptList(rootlist)//把普通数组转化成树形结构
    ctx.body = utils.success(res)
  } catch (err) {
    ctx.body = utils.fail(`部门列表渲染失败${err}`)
  }
})



//列表创建&编辑
router.post('/operate', async (ctx, next) => {
    const params = ctx.request.body
    // console.log('params',params);
    // console.log('params=>', params);
    const { deptId, deptName, userName, userId, userEmail, userName2, userEmail2,active, _id } = params
    if (active == 'create') {//创建
        if (!deptName) {//验证前端是否填写
            ctx.body = utils.fail('参数错误')
        }
        let res = await Dept.create(params)
        console.log('dept',res);
        ctx.body = utils.success('列表创建成功')
    } else if (active == 'add') {
        let res = await Dept.create(params)
        ctx.body = utils.success('部门新增成功')
    }else if(active == 'edit') {
        let res = await Dept.findOneAndUpdate({_id}, params)
        ctx.body = utils.success('更新成功')
    }
})


//部门删除
router.post('/delete', async (ctx) => {
  var _id = ctx.request.body
  // console.log('id=>', _id);
  try {
    let res = await Dept.findByIdAndDelete(_id)
    await Dept.deleteMany({ deptId: { $all: _id } })
    ctx.body = utils.success(`删除成功`)
  } catch (error) {
    console.log(error);
  }
})


module.exports = router
